package src.edu.wayne.cs.csc4110.hw6.interfaces;

public interface Game {
	//Session being set would happen in the constructor as it is part of the game state.
	//Rules may happen too as it is part of the particular game
	
	/**
	 * Gets a player by supplying a user name.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param none
	 * @return integer gameId
	 * */
	
	/**
	 * 
	 * @return int gameId
	 */
	public Game getGame();
	
	/**
	 * sets the gameId
	 * @param gameId
	 */
	public void setGame(Game game);
	
	/**
	 * Gets a player by supplying a user name.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param userName The User that you are looking for.
	 * @return <b>User</b> object if found, <b>null</b> if nothing.
	 * */
	public User getPlayer(String userName);
	/**
	 * Adds a player to the game.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param newPlayer The User that you are adding to the game.
	 * @return <b>True</b> if successful, <b>False</b> otherwise.
	 * */
	public Boolean addPlayer(User newPlayer);
	/**
	 * Removes a player from the game.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param userName The user name that you are looking to remove.
	 * @return <b>True</b> if successful, <b>False</b> otherwise.
	 * */
	public Boolean removePlayer(String userName);
	
	/**
	 * Send message to all players.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param player The player that is sending the message.
	 * @param msg The actual message that the player is trying to send.
	 * @return <b>True</b> if successful, <b>False</b> otherwise.
	 * */
	public void sendPlayerMessage(User player, String msg);
	
	/**
	 * Sets a player as the host of the game.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @return The user that is the host of the game.
	 * */
	public User getHostPlayer();
	/**
	 * Replaces the host with a different player in the game.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param playerHost The player that is part of the game an is being made the host.
	 * @return <b>True</b> if successful, <b>False</b> otherwise.
	 * */
	public Boolean setHostPlayer(User playerHost);
	
	/**
	 * method to start a game.
	 */
	public void startGame();
	
}
